草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 将 C++ 代码拆分为多个翻译单元是否会增加可执行文件大小的开销?

我在静态库中的多个项目之间共享了一些代码。即使使用函数级链接,我在输出中得到的目标代码也比我想要的多-seeanotherquestionaboutthat.当然,减少链接到最终可执行文件的目标代码数量的最直接解决方案是拆分翻译单元,这样我就可以得到更多的.obj文件,每个文件的目标代码都更少。我什至可以走极端-将每个函数放入一个单独的翻译单元。假设我不关心由十倍以上的.cpp文件引起的困惑,也不关心可能的链接时间增长。这样拆分成许多目标文件是否会增加可执行文件大小的开销?可执行文件是否会因为链接到其中的.obj文件多十倍(但总体上它们具有完全相同的函数和变量)而变得更大?

c++ - 在 C++ 中使用枚举进行面向整数位的操作是否可靠/安全?

考虑以下(简化的)代码:enumeTestMode{TM_BASIC=1,//1这是可靠、安全和/或良好的做法吗?或者除了使用constint而不是枚举之外,是否有更好的方法来实现我想做的事情?我真的更喜欢枚举,但代码可靠性比可读性更重要。 最佳答案 我看不出那个设计有什么不好。但是,请记住enum类型可以包含未指定的值。根据谁使用您的函数,您可能需要先检查tsm的值是否是有效的枚举值。因为enums是整数值,所以可以这样做:eTestModetsm=static_cast(17);//Weconsiderherethat17isn

c# - 通过 C++ header 在 C++ 和 C# 中使用枚举

我有一个用C++编写的服务器,它位于命名管道的末端,嗯,提供服务。可以发送到服务器的命令在位于头文件中的枚举中定义。enum{e_doThing1,e_doThing2...e_doLastThing};所需枚举的值被放入发送到服务器的消息的第一个字节中,因此它知道要做什么。我现在正在编写一个需要访问服务的C#客户端。有什么方法可以将header包含到C#代码中,这样我就不必在两个位置维护相同的列表了吗?谢谢,帕特里克 最佳答案 如果您要将枚举放入命名空间并为其命名,您可能只需将头文件直接添加到C#项目即可。编辑最终解决方案:这种方

c++ - 接口(interface)开销

我有一个看起来像Boost.Array的简单类。有两个模板参数T和N。Boost.Array的一个缺点是,每个使用这种数组的方法都必须是带有参数N的模板(T可以)。结果是整个程序往往是一个模板。一个想法是创建一个仅依赖于T(类似于ArrayInterface)的接口(interface)(只有纯虚函数的抽象类)。现在每个其他类都只访问接口(interface),因此只需要模板参数T(与N相比,它或多或少总是已知的)。如果使用接口(interface),这里的缺点是虚拟调用的开销(更多的是错过了内联调用的机会)。直到这里只有事实。templateclassArrayInterface{p

c++ - 在循环中使用枚举和值一致性

我非常喜欢C++的强类型特性,我最喜欢的是在处理有限的数据集时使用枚举。但是枚举缺少一些有用的特性,例如运算符:enumclassHex:int{n00,n01,n02,n03,n04,n05,n06,n07,n08,n09,n10,n11,n12,n13,n14,n15};for(Hexh=Hex::n0;h很容易摆脱运营商的缺乏,在相同的范围内创建一个免费的运营商:Hex&operator++(Hex&h){intr=static_cast(Hex);h=static_cast(r+1);returnh;}for(Hexh=Hex::n0;h但这种方法与其说是一种解决方案,不如说是

c++ - 使作用域枚举与基础类型相当

我试图在我的程序中使作用域枚举与底层类型相当,但以下代码不起作用。是因为我使用的编译器(VC11)对C++11标准的支持很差,还是因为代码违反了C++11标准的一些规则?在后一种情况下,究竟违反了哪些规则(欢迎引用特定的标准条款)?#includeenumclassTest:shortint{A,B,C};templatebooloperator!=(Ee,typenamestd::underlying_type::typen){returnstatic_cast::type>(e)!=n;}templatebooloperator!=(typenamestd::underlying_

c++ - 切换枚举类的所有项目时的默认案例编译

为什么下面的开关甚至编译默认情况,因为它涵盖了枚举类的所有项目?我本以为这就是首先拥有强大的enumclass的原因。至于为什么即使我知道我涵盖了所有情况,我还是希望有一个默认值:这可以保护我免受future粗心大意(以及其他同事的粗心)enumclassE{a,b};intmain(){Ec=E::b;switch(c){caseE::a:caseE::b:std::coutProof 最佳答案 因为编译无法知道是否有人将非法值强制转换为枚举类型。考虑:Ec=static_cast(42);Actor将在没有警告(甚至错误)的情况

c++ - 如何使用 Python 2.7.2 将 C++ 枚举转换为 ctypes.Structure?

我找了又找,但我还没有找到一个可以完成我需要做的事情的例子。我发现HowcanIrepresentan'Enum'inPython?在这里,但它不包括ctypes.Structure。我还发现Usingenumsinctypes.Structure在这里,但它包含我不熟悉的指针。我有一个包含typedef枚举的头文件,我需要在Python文件的ctypes.Structure中使用它。C++头文件:typedefenum{ID_UNUSED,ID_DEVICE_NAME,ID_SCSI,ID_DEVICE_NUM,}id_type_et;Python文件(我目前使用的方式):class

c++ - 通用模板化枚举空值

clang++提示变量未初始化:templatevoidfunc(){TEnumenumVar;//...if(something())enumVar=someValue();//...if(something())doSomethingWith(enumVar);//通常,为了避免这个警告,枚举可以有一个Unknown=-1值或类似的东西-但不幸的是,在这里枚举类型被用户传递为typenameTEnum,所以我不知道它是否包含“空值”。有什么办法可以解决这个问题吗?还是我应该忽略/禁止显示警告? 最佳答案 总是初始化,例如使用三元

c++ - 在什么情况下我应该为 C++11 中的枚举类使用固定宽度的整数

我应该在什么情况下使用它:enumclassMyFixedType:uint32_t//oranyotherfixedwidthintegertype{ID1,ID2,ID3};关于这个:enumclassMyType{ID1,ID2,ID3};? 最佳答案 一些可能有用的场景超出了我的脑海:空间有限,您真的不需要标准的int大小的枚举。如果您使用的系统中整数以64位格式存储,并且您只有少于255个不同的枚举值,则您可能需要指定您希望/需要每个枚举元素的位数更少。机器之间的高效通信。假设您知道在两台机器上使用相同的字节顺序,但整数具